iT邦幫忙

2025 iThome 鐵人賽

DAY 16
0
佛心分享-IT 人自學之術

OpwnCV影像處理新手村系列 第 16

🚀 DAY 16:邊緣檢測(Edge Detection)|Sobel、Laplacian、Canny

  • 分享至 

  • xImage
  •  

邊緣檢測是影像處理中用來找出物體邊界的關鍵技術。邊緣通常對應於影像中亮度急遽變化的位置,可協助分割物體、偵測輪廓,並提升後續分析的精度。
常見方法有 Sobel、Laplacian、Canny,各自適用於不同場景。


🖼 測試圖片準備

請準備一張灰階圖片 image.jpg,並放在程式同一資料夾。

import cv2


img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('Original', img)

# 將以下程式碼放在所有顯示語句的最後面
cv2.waitKey()
cv2.destroyAllWindows()

https://ithelp.ithome.com.tw/upload/images/20250920/201294826rq85lm8yX.png


🔹 1. Sobel 邊緣檢測

Sobel 是一階導數運算,能分別檢測水平方向與垂直方向的邊緣,適合用於分析影像的方向性結構。


# Sobel X(水平方向邊緣)
sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
# Sobel Y(垂直方向邊緣)
sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
# 合併 X 與 Y,取得總邊緣強度
sobel_combined = cv2.magnitude(sobelx, sobely)

cv2.imshow('Sobel X', sobelx)
cv2.imshow('Sobel Y', sobely)
cv2.imshow('Sobel Combined', sobel_combined)

📌 參數說明

  • cv2.Sobel(src, ddepth, dx, dy, ksize)
    • src → 輸入影像
    • ddepth → 輸出影像深度(通常 cv2.CV_64F
    • dx / dy → 導數方向(x=1,y=0 表水平;x=0,y=1 表垂直)
    • ksize → Sobel 核大小(1、3、5、7)

效果示意:可分別取得水平、垂直及綜合邊緣資訊

https://ithelp.ithome.com.tw/upload/images/20250920/201294825oMzq7KmaE.png


🔹 2. Laplacian 邊緣檢測

Laplacian 是二階導數運算,能同時檢測影像中所有方向的邊緣,適合用於全局邊緣偵測。

laplacian = cv2.Laplacian(img, cv2.CV_64F, ksize=3)

cv2.imshow('Laplacian', laplacian)

📌 參數說明

  • cv2.Laplacian(src, ddepth, ksize)
    • ddepth → 通常設為 cv2.CV_64F
    • ksize → 核大小(1, 3, 5 …)

效果示意:可一次取得各方向的邊緣,對雜訊較敏感

https://ithelp.ithome.com.tw/upload/images/20250920/20129482a5U7QETNhe.png


🔹 3. Canny 邊緣檢測

Canny 是一種強大的邊緣檢測演算法,包含高斯模糊、梯度計算、非極大值抑制、雙閾值檢測等步驟。其結果乾淨且抗雜訊,常用於物體輪廓偵測。

canny = cv2.Canny(img, 100, 200)

cv2.imshow('Canny Edge', canny)

📌 參數說明

  • cv2.Canny(image, threshold1, threshold2)
    • threshold1 → 低閾值
    • threshold2 → 高閾值

👉 建議先嘗試 (100,200)(50,150),再依需求調整。閾值設定會影響邊緣偵測的敏感度。

效果示意:可取得乾淨且連續的物體邊界

https://ithelp.ithome.com.tw/upload/images/20250920/20129482yqAPyrFUjO.png


📊 方法比較

方法 特點 適用場景
Sobel 可分水平與垂直邊緣,方向性強 基本邊緣檢測、分析梯度方向
Laplacian 同時偵測所有方向邊緣,對雜訊較敏感 全局邊緣檢測、快速輪廓擷取
Canny 精確且抗雜訊,結果乾淨且連續 複雜影像、物體邊界偵測

Sobel 適合用於分析影像的方向性結構,Laplacian 可快速取得全局邊緣但易受雜訊影響,Canny 則最適合精確偵測物體輪廓,尤其在雜訊多或需求高精度時。


📖 今日結語

邊緣檢測是影像分析的基礎技術,其中 Canny 是最常用且效果最佳的方法,適合精確偵測物體輪廓;Sobel 與 Laplacian 則適合快速檢測或學習影像梯度結構。根據影像特性與需求,靈活調整參數能取得更理想的結果。


上一篇
🚀 DAY 15:影像形態學運算(Morphological Transformations)|Erosion、Dilation、Opening、Closing
下一篇
🚀 DAY 17:影像輪廓與形狀分析(Contours & Shape Analysis)
系列文
OpwnCV影像處理新手村22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言